/*
 * MyTreeCellRender.java
 *
 * Copyright 2011 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 05/03/2011, 11:23:38 AM
 */

package com.ufps.cuatro.util.render;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellRenderer;

import com.ufps.cuatro.controlador.render.UtilRender;
import com.ufps.cuatro.modelo.biblioteca.ItemStaticListModelObject;
import com.ufps.cuatro.modelo.biblioteca.StaticListModelObject;
import com.ufps.cuatro.modelo.old.ComponenteBeans;
import com.ufps.cuatro.modelo.representacion.EventoOyente;
import com.ufps.cuatro.modelo.representacion.ModeloAsociado;
import com.ufps.cuatro.modelo.representacion.ObjetoTipoDatoReflexion;
import com.ufps.cuatro.modelo.representacion.Oyente;
import com.ufps.cuatro.modelo.representacion.PropiedadBeans;
import com.ufps.cuatro.modelo.representacion.componente.Componente;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorContenedorEspejo;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorContenedorLibre;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorExtra;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorClaseCompleja;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorEnum;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorMetodo;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorString;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorUnitario;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorVinculador;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorIntegradorExtra;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorIntegradorMetodo;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorIntegradorSimple;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorModeloAsociado;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteGeneradoInterno;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteGeneradoSimple;
import com.ufps.cuatro.util.InformacionNodo;
import com.ufps.cuatro.util.Representacion;
import com.ufps.cuatro.util.TipoCaso;
import com.ufps.cuatro.util.Utileria;
import com.ufps.cuatro.util.base.ComponenteBasePersonalizado;
import com.ufps.cuatro.util.base.ComponenteBaseStandar;

/**
 * <i><b>MyTreeCellRender:</b></i>@DefinicionClase
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 05/03/2011
 * @see JPanel
 * @see TreeCellRenderer
 * @see Serializable
 */
public class MyTreeCellRender extends JPanel implements TreeCellRenderer, Serializable{
    private static final long serialVersionUID = -1644200870820278146L;
    
    private JLabel jlblEtiquetaNodo = null;
    private JLabel jlblIconoNodo = null;
    
    /**
     *@DefinicionAtributo
     */
    public final static int SIZE = 27;

    private int modo;
    
    /**
     * @DefinicionMetodo
     * @param modo @DefinicionParametro
     */
    public MyTreeCellRender(int modo) {
        this.modo = modo;        
        this.jlblEtiquetaNodo = new JLabel();
        this.jlblIconoNodo = new JLabel();        
        this.add(jlblIconoNodo);
        this.add(jlblEtiquetaNodo);
        this.setOpaque(false);             
    }

    private Component getEstructuraJar(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodo = (InformacionNodo) nodeInfo;
        // Se pone el icono adecuado
        if (leaf) {
            //es una hoja, se debe evaluar el tipo
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_VACIO, nodeInfo.toString(), "", selected);
            } else {
                Object obj = objNodo.getObjElemento();
                if (obj instanceof Package) {
                        this.setIcono(Utileria.ICONO_PAQUETE, nodeInfo.toString(), "Paquete", "Paquete", selected);
                } else if (obj instanceof Class) {
                    Class<?> objTemp = (Class<?>) obj;
                    if(objTemp.isAnnotation()){
                        this.setIcono(Utileria.ICONO_ANOTACION, nodeInfo.toString(), "Anotación", "Anotación", selected);
                    }
                    else if(objTemp.isEnum()){
                        this.setIcono(Utileria.ICONO_ENUMERACION, nodeInfo.toString(), "Enumeración", "Enumeración", selected);
                    }
                    else if(objTemp.isInterface()){
                        this.setIcono(Utileria.ICONO_INTERFAZ, nodeInfo.toString(), "Interfaz", "Interfaz",selected);
                    }
                    else if(objTemp instanceof Object){
                        this.setIcono(Utileria.ICONO_SUPER, nodeInfo.toString(), "Clase Padre", "Clase Padre", selected);
                    }
                    else{
                        this.setIcono(Utileria.ICONO_CLASE, nodeInfo.toString(), "Clase", "Clase",selected);
                    }
                } else if (obj instanceof Field) {
                    this.setIcono(Utileria.ICONO_ATRIBUTO, nodeInfo.toString(), "Atributo", "Atributo",selected);
                } else if (obj instanceof Method) {
                    this.setIcono(Utileria.ICONO_METODO, nodeInfo.toString(), "Método", "Método",selected);
                } else if (obj instanceof Constructor) {
                    this.setIcono(Utileria.ICONO_CONSTRUCTOR, nodeInfo.toString(), "Constructor", "Constructor",selected);
                }
            }
        } else {
            Object obj = objNodo.getObjElemento();
            if(nodeInfo.toString().compareTo("Modelo Analizado") == 0){
                this.setIcono(Utileria.ICONO_RAIZ_JAR, nodeInfo.toString(), "Estructura Analizada",selected);
            }
            else if (obj instanceof Class) {
                this.setIcono(Utileria.ICONO_CLASE, nodeInfo.toString(), "Clase", "Clase",selected);
            }
            else{
                //es una carpeta, se debe evaluar el tipo
                this.setIcono(Utileria.ICONO_CARPETA, nodeInfo.toString(), "",selected);
            }
        }
        this.repaint();
        return this;
    }

    private void setIcono(String key, String info, String tooltips, boolean selected){
        ImageIcon icono = Utileria.leerRecursoImagen(key, 16);
        JLabel labelIcono = new JLabel(icono);
        this.jlblIconoNodo.setIcon(labelIcono.getIcon());
        this.jlblIconoNodo.setSize(new Dimension(MyTreeCellRender.SIZE, MyTreeCellRender.SIZE));
        String strFormat = UtilRender.formatFontSizeHtml(info, 2, true);
        this.jlblEtiquetaNodo.setText(strFormat);
        this.jlblEtiquetaNodo.setHorizontalTextPosition(JLabel.LEADING);
        if(!tooltips.isEmpty()){
            this.jlblEtiquetaNodo.setToolTipText(tooltips);
            this.jlblIconoNodo.setToolTipText(tooltips);
        }
        if(selected){            
            this.jlblEtiquetaNodo.setForeground(new Color(255,255,255));            
        }
        else{            
            this.jlblEtiquetaNodo.setForeground(new Color(0,0,0));            
        } 
        
        this.repaint();
    }    
    
    private void setIcono(String key, String infoA, String infoB, String tooltips, boolean selected){
        ImageIcon icono = Utileria.leerRecursoImagen(key, 16);
        JLabel labelIcono = new JLabel(icono);
        this.jlblIconoNodo.setIcon(labelIcono.getIcon());
        this.jlblIconoNodo.setSize(new Dimension(MyTreeCellRender.SIZE, MyTreeCellRender.SIZE));
        if(Utileria.isFormatHTML(infoA)){
            infoA = Utileria.formatStringSinHTML(infoA);
        }
        if(Utileria.isFormatHTML(infoB)){
            infoB = Utileria.formatStringSinHTML(infoB);
        }
        String strFormatA = UtilRender.formatFontSizeHtml(infoA, 2, false);
        String strFormatB = UtilRender.formatFontSizeColorHtml(infoB, 2, "AAAAAA", false);
        String strFormat = "<html>" + strFormatA + " : " + strFormatB + "</html>";
        this.jlblEtiquetaNodo.setText(strFormat);
        this.jlblEtiquetaNodo.setHorizontalTextPosition(JLabel.LEADING);
        if(!tooltips.isEmpty()){
            this.jlblEtiquetaNodo.setToolTipText(tooltips);
            this.jlblIconoNodo.setToolTipText(tooltips);
        }
        if(selected){            
            this.jlblEtiquetaNodo.setForeground(new Color(255,255,255));            
        }
        else{            
            this.jlblEtiquetaNodo.setForeground(new Color(0,0,0));            
        } 
        
        this.repaint();
    }

    private void configIconoObjetoTipoDatoReflexion(ObjetoTipoDatoReflexion objTipoDato, boolean selected){
        if(objTipoDato.getObjCaso().geteCaso() == TipoCaso.ePrimitivo){
            this.setIcono(Utileria.ICONO_PRIMITIVO, objTipoDato.getStrNombre(), "Caso Primitivo",selected);
        }
        else if(objTipoDato.getObjCaso().geteCaso() == TipoCaso.eJDKRegistrado){
            this.setIcono(Utileria.ICONO_JDK_REGISTRADO, objTipoDato.getStrNombre(), "Caso JDK Registrado",selected);
        }
        else if(objTipoDato.getObjCaso().geteCaso() == TipoCaso.eEnumeracion){
            this.setIcono(Utileria.ICONO_ENUMERACION, objTipoDato.getStrNombre(), "Caso Especial Enum",selected);
        }
        else if(objTipoDato.getObjCaso().geteCaso() == TipoCaso.eClaseMundo){
            this.setIcono(Utileria.ICONO_CLASE, objTipoDato.getStrNombre(), "Caso Clase Mundo",selected);
        }
        else if(objTipoDato.getObjCaso().geteCaso() == TipoCaso.eArray){
            this.setIcono(Utileria.ICONO_ARRAY, objTipoDato.getStrNombre(), "Caso Array",selected);
        }        
        else if(objTipoDato.getObjCaso().geteCaso() == TipoCaso.eJDKNoRegistrado){
            this.setIcono(Utileria.ICONO_JDK_NO_REGISTRADO, objTipoDato.getStrNombre(), "Caso JDK No Registrado",selected);
        }
    }
    
    private void configIconoComponente(Componente obj, boolean selected){
        //GeneradorComponentes.getValorPropiedad(objComponenteGeneradorClase, "Name")
        String strComponente = obj.getName();        
        if(!obj.isIncluido()){
            try{
                if(!strComponente.isEmpty())strComponente = "<html><s>" + strComponente + "</s></html>";                
            }catch(java.lang.NullPointerException ex){}
        } 
        if(obj instanceof ComponenteDistribuidorContenedorEspejo){
            this.setIcono(Utileria.ICONO_COMPONENTE_CONTENEDOR_ASISTENTE_ESPEJO, strComponente, "Formulario", "Componente Contenedor",selected);
        }
        else if(obj instanceof ComponenteDistribuidorContenedorLibre){
            this.setIcono(Utileria.ICONO_COMPONENTE_CONTENEDOR_ASISTENTE_LIBRE, strComponente, "Formulario", "Componente Contenedor",selected);
        }       
        else if(obj instanceof ComponenteDistribuidorIntegradorMetodo){
            ComponenteDistribuidorIntegradorMetodo objComponenteDistribuidorIntegradorMetodo = (ComponenteDistribuidorIntegradorMetodo) obj;
            String strLabel = objComponenteDistribuidorIntegradorMetodo.getObjReflexion().getToGenericString();
            this.setIcono(Utileria.ICONO_COMPONENTE_INTEGRADOR_METODO, strComponente, strLabel, "Componente Integrador",selected);
        }
        else if(obj instanceof ComponenteDistribuidorIntegradorSimple){
            this.setIcono(Utileria.ICONO_COMPONENTE_INTEGRADOR_SIMPLE, strComponente, "Panel", "Componente Integrador",selected);
        }
        else if(obj instanceof ComponenteDistribuidorIntegradorExtra){
            this.setIcono(Utileria.ICONO_COMPONENTE_INTEGRADOR_EXTRA, strComponente, "Panel", "Componente Integrador",selected);
        }
        else if(obj instanceof ComponenteDistribuidorGeneradorClaseCompleja){
            ComponenteDistribuidorGeneradorClaseCompleja objComponenteDistribuidorGeneradorClaseCompleja = (ComponenteDistribuidorGeneradorClaseCompleja) obj;
            String strLabel = objComponenteDistribuidorGeneradorClaseCompleja.getObjTipoDato().getStrClassPath();
            this.setIcono(Utileria.ICONO_COMPONENTE_CLASE_COMPLEJA, strComponente, strLabel, "Componente Generador",selected);
        }                
        else if(obj instanceof ComponenteDistribuidorGeneradorMetodo){
            ComponenteDistribuidorGeneradorMetodo objComponenteDistribuidorGeneradorMetodo = (ComponenteDistribuidorGeneradorMetodo) obj;
            String strLabel = objComponenteDistribuidorGeneradorMetodo.getStrMetodo();
            this.setIcono(Utileria.ICONO_COMPONENTE_METODO, strComponente, strLabel, "Componente Generador",selected);
        }                
        else if(obj instanceof ComponenteDistribuidorGeneradorEnum){
            ComponenteDistribuidorGeneradorEnum objComponenteDistribuidorGeneradorEnum = (ComponenteDistribuidorGeneradorEnum) obj;
            String strLabel = objComponenteDistribuidorGeneradorEnum.getObjTipoDato().getStrClassPath();
            this.setIcono(Utileria.ICONO_COMPONENTE_ENUM, strComponente, strLabel, "Componente Generador",selected);
        }          
        else if(obj instanceof ComponenteDistribuidorGeneradorVinculador){
            ComponenteDistribuidorGeneradorVinculador objComponenteDistribuidorGeneradorVinculador = (ComponenteDistribuidorGeneradorVinculador) obj;
            String strLabel = objComponenteDistribuidorGeneradorVinculador.getObjTipoDato().getStrClassPath();
            this.setIcono(Utileria.ICONO_COMPONENTE_GENERADOR_VINCULADOR, strComponente, strLabel, "Componente Generador",selected);
        }
        else if(obj instanceof ComponenteDistribuidorGeneradorUnitario){
            ComponenteDistribuidorGeneradorUnitario objComponenteDistribuidorGeneradorUnitario = (ComponenteDistribuidorGeneradorUnitario) obj;
            String strLabel = objComponenteDistribuidorGeneradorUnitario.getObjTipoDato().getStrClassPath();
            this.setIcono(Utileria.ICONO_COMPONENTE_GENERADOR_UNITARIO, strComponente, strLabel, "Componente Generador",selected);
        }
        else if(obj instanceof ComponenteDistribuidorGeneradorString){            
            this.setIcono(Utileria.ICONO_COMPONENTE_GENERADOR_STRING, strComponente, "Propiedades Computadas", "Componente Generador",selected);
        }
        else if(obj instanceof ComponenteDistribuidorExtra){
            this.setIcono(Utileria.ICONO_COMPONENTE_EXTRA, strComponente, "Componente Extra",selected);
        }
        else if(obj instanceof ComponenteGeneradoInterno){
            ComponenteGeneradoInterno objComponenteGeneradoInterno = (ComponenteGeneradoInterno) obj;
            String strLabel = objComponenteGeneradoInterno.getObjClassSwing().getSimpleName();
            this.setIcono(Utileria.ICONO_COMPONENTE_GENERADOR, strComponente, strLabel, "Componente Generado",selected);
        }
        else if(obj instanceof ComponenteGeneradoSimple){
            ComponenteGeneradoSimple objComponenteGeneradoSimple = (ComponenteGeneradoSimple) obj;
            String strLabel = objComponenteGeneradoSimple.getObjClassSwing().getSimpleName();
            this.setIcono(Utileria.ICONO_COMPONENTE_GENERADO, strComponente, strLabel, "Componente Generado",selected);
        }        
        else if(obj instanceof ComponenteDistribuidorModeloAsociado){
            this.setIcono(Utileria.ICONO_COMPONENTE_MODELO_ASOCIADO, strComponente, "Componente Generado",selected);
        }
    }
    
    private void configIconoRaiz(InformacionNodo objNodo, boolean selected){
        String strEtiqueta = Utileria.formatStringSinHTML(objNodo.getStrIdentificador());        
        if(Utileria.objTitulosArbolesCarpeta.contains(strEtiqueta)){
            this.setIcono(Utileria.ICONO_CARPETA, strEtiqueta, "", selected);
        }
        else if(Utileria.objTitulosArbolesPaquetes.contains(strEtiqueta)){
            this.setIcono(Utileria.ICONO_PAQUETE, strEtiqueta, "", selected);
        }        
        else if(Utileria.objTitulosArbolesGUI.contains(strEtiqueta)){
            this.setIcono(Utileria.ICONO_RAIZ_GUI, strEtiqueta, "", selected);
        }
        else if(strEtiqueta.startsWith("Biblioteca")){
            this.setIcono(Utileria.ICONO_ITEM_COMBO_LIBG, strEtiqueta, "", selected);
        }        
        else{
            this.setIcono(Utileria.ICONO_VACIO, strEtiqueta, "", selected);
        }
    }
    
    private void configIconoCaso(TipoCaso eCaso, boolean selected){        
        String strNombre = eCaso.toString();
        if(eCaso == TipoCaso.eArray){
            this.setIcono(Utileria.ICONO_ARRAY, strNombre, "", selected);
        }
        else if(eCaso == TipoCaso.eClaseMundo){
            this.setIcono(Utileria.ICONO_CLASE, strNombre, "", selected);
        }                
        else if(eCaso == TipoCaso.eEnumeracion){
            this.setIcono(Utileria.ICONO_ENUMERACION, strNombre, "", selected);
        }
        else if(eCaso == TipoCaso.eJDKNoRegistrado){
            this.setIcono(Utileria.ICONO_JDK_NO_REGISTRADO, strNombre, "", selected);
        }
        else if(eCaso == TipoCaso.eJDKRegistrado){
            this.setIcono(Utileria.ICONO_JDK_REGISTRADO, strNombre, "", selected);
        }
        else if(eCaso == TipoCaso.ePrimitivo){
            this.setIcono(Utileria.ICONO_PRIMITIVO, strNombre, "", selected);
        }
    }

    private Component getEstructuraComponentes(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodo = (InformacionNodo) nodeInfo;
        // Se pone el icono adecuado
        if(node.isRoot()){
            if (objNodo.getObjElemento() == null) {
                this.configIconoRaiz(objNodo, selected);                
            }
            else{
                Object obj = objNodo.getObjElemento();
                if(obj instanceof ObjetoTipoDatoReflexion){
                    this.configIconoObjetoTipoDatoReflexion((ObjetoTipoDatoReflexion) obj,selected);
                }
                else if(obj instanceof Componente){
                    this.configIconoComponente((Componente)obj, selected);
                }
                else{
                    this.setIcono(Utileria.ICONO_RAIZ_GUI, nodeInfo.toString(), "",selected);
                }
//                else{
//                    this.setIcono(Utileria.ICONO_VACIO, nodeInfo.toString(), "",selected);
//                }
            }
        }
        else if (leaf) {
            //es una hoja, se debe evaluar el tipo
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_VACIO, objNodo.getStrIdentificador(), "",selected);
            } else {
                Object obj = objNodo.getObjElemento();
                if(obj instanceof Componente){
                    this.configIconoComponente((Componente)obj, selected);
                }                
                else if (obj instanceof Oyente) {
                    Oyente objOyente = (Oyente) obj;
                    this.setIcono(Utileria.ICONO_OYENTE, objOyente.getStrNombre(), "Oyente",selected);
                }
                else if (obj instanceof EventoOyente) {
                    EventoOyente objEvento = (EventoOyente) obj;
                    String strNombre = objEvento.getStrAlias().isEmpty() ? objEvento.getStrNombre() : objEvento.getStrAlias();
                    this.setIcono(Utileria.ICONO_EVENTO, strNombre, "Evento",selected);
                }
                else if(obj instanceof ObjetoTipoDatoReflexion){
                    this.configIconoObjetoTipoDatoReflexion((ObjetoTipoDatoReflexion) obj,selected);
                }
                else if (obj instanceof String) {
                    String strClassPathComponente = (String) obj;
                    this.setIcono(Utileria.ICONO_COMPONENTE, strClassPathComponente, "Control Swing", selected);
                }
                else if(obj instanceof PropiedadBeans){
                    PropiedadBeans objPropiedadBeans = (PropiedadBeans) obj;
                    this.setIcono(Utileria.ICONO_PROPIEDAD_BEANS, objNodo.getStrIdentificador(), "", selected);
                }
            }
        }
        else{
            //son grupos
            Object obj = objNodo.getObjElemento();
            if (obj == null) {
                this.setIcono(Utileria.ICONO_CARPETA, objNodo.getStrIdentificador(), "",selected);
            }            
            else if(obj instanceof Componente){
                this.configIconoComponente((Componente)obj, selected);
            }
            else if (obj instanceof Oyente) {
                this.setIcono(Utileria.ICONO_OYENTE, objNodo.getStrIdentificador(), "Oyente",selected);
            }
            else if(obj instanceof ObjetoTipoDatoReflexion){
                this.configIconoObjetoTipoDatoReflexion((ObjetoTipoDatoReflexion) obj,selected);
            }
            else if(obj instanceof Field){
                this.setIcono(Utileria.ICONO_ATRIBUTO, objNodo.getStrIdentificador(), "",selected);
            }
            else if(obj instanceof Method){
                this.setIcono(Utileria.ICONO_METODO, objNodo.getStrIdentificador(), "",selected);
            }
            else if(obj instanceof ModeloAsociado){
                this.setIcono(Utileria.ICONO_MODELO_ASOCIADO, objNodo.getStrIdentificador(), "",selected);
            }
            else if(obj instanceof ComponenteBeans){
                this.setIcono(Utileria.ICONO_COMPONENTE_BEANS, objNodo.getStrIdentificador(), "",selected);
            }
        }
        return this;
    }

    private Component getEstructuraTiposDeDatos(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodo = (InformacionNodo) nodeInfo;
        // Se pone el icono adecuado
        if (leaf) {
            //es una hoja, se debe evaluar el tipo
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_VACIO, nodeInfo.toString(), "",selected);
            } else {
                Object obj = objNodo.getObjElemento();
                if (obj instanceof Package) {
                        this.setIcono(Utileria.ICONO_PAQUETE, nodeInfo.toString(), "",selected);
                } else if (obj instanceof Class) {
                    Class<?> objTemp = (Class<?>) obj;
                    if(objTemp.isPrimitive()){
                        this.setIcono(Utileria.ICONO_PRIMITIVO, nodeInfo.toString(), "",selected);
                    }
                    else if(objTemp.isArray()){
                        this.setIcono(Utileria.ICONO_ARRAY, nodeInfo.toString(), "",selected);
                    }
                    else if(objTemp.isAnnotation()){
                        this.setIcono(Utileria.ICONO_ANOTACION, nodeInfo.toString(), "",selected);
                    }
                    else if(objTemp.isEnum()){
                        this.setIcono(Utileria.ICONO_ENUMERACION, nodeInfo.toString(), "",selected);
                    }
                    else if(objTemp.isInterface()){
                        this.setIcono(Utileria.ICONO_INTERFAZ, nodeInfo.toString(), "",selected);
                    }
                    else if(objTemp instanceof Object){
                        this.setIcono(Utileria.ICONO_SUPER, nodeInfo.toString(), "",selected);
                    }
                    else{
                        if(Representacion.esCasoRegistrado(objTemp)){
                            this.setIcono(Utileria.ICONO_JDK_REGISTRADO, nodeInfo.toString(), "",selected);
                        }
                        else {
                            this.setIcono(Utileria.ICONO_CLASE, nodeInfo.toString(), "",selected);
                        }
                    }
                } else if (obj instanceof Field) {
                    this.setIcono(Utileria.ICONO_ATRIBUTO, nodeInfo.toString(), "",selected);
                } else if (obj instanceof Method) {
                    this.setIcono(Utileria.ICONO_METODO, nodeInfo.toString(), "",selected);
                } else if (obj instanceof Constructor) {
                    this.setIcono(Utileria.ICONO_CONSTRUCTOR, nodeInfo.toString(), "",selected);
                }
            }
        } else {
            Object obj = objNodo.getObjElemento();
            if(nodeInfo.toString().compareTo(Utileria.leerRecursoTexto("Utileria.msg.titulo.arbol.jar")) == 0){
                this.setIcono(Utileria.ICONO_RAIZ_JAR, nodeInfo.toString(), "",selected);
            }
            else if(nodeInfo.toString().compareTo(Utileria.leerRecursoTexto("Utileria.msg.titulo.arbol.type")) == 0){
                this.setIcono(Utileria.ICONO_RAIZ_TYPE, nodeInfo.toString(), "",selected);
            }
            else if (obj instanceof Class) {
                Class<?> objTemp = (Class<?>) obj;
                if(objTemp.isEnum()){
                    this.setIcono(Utileria.ICONO_ENUMERACION, nodeInfo.toString(), "",selected);
                }
                else if(Representacion.esCasoRegistrado(objTemp)){
                    this.setIcono(Utileria.ICONO_JDK_REGISTRADO, nodeInfo.toString(), "",selected);
                }
                else if(Representacion.esCasoClaseMundo(objTemp.getCanonicalName())){
                    this.setIcono(Utileria.ICONO_CLASE, nodeInfo.toString(), "",selected);
                }                
                else {
                    this.setIcono(Utileria.ICONO_JDK_NO_REGISTRADO, nodeInfo.toString(), "",selected);
                }
                //this.setIcono(Utileria.ICONO_PAQUETE_JAVA_LANG, nodeInfo.toString());
            }
            else if(obj instanceof ObjetoTipoDatoReflexion){
                this.setIcono(Utileria.ICONO_TIPO_DATO, objNodo.getStrIdentificador(), "",selected);                
            }
            else{
                //es una carpeta, se debe evaluar el tipo
                this.setIcono(Utileria.ICONO_CARPETA, nodeInfo.toString(), "",selected);
            }
        }
        this.repaint();
        return this;
    }
    
    private Component getEstructuraPaleta(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodo = (InformacionNodo) nodeInfo;
        // Se pone el icono adecuado
        if(node.isRoot()){            
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_RAIZ_GUI, objNodo.getStrIdentificador(), "",selected);                
            }            
        }
        else if (leaf) {
            //es una hoja, se debe evaluar el tipo
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_VACIO, objNodo.getStrIdentificador(), "",selected);
            } else {
                Object obj = objNodo.getObjElemento();                
                if(obj instanceof ComponenteBaseStandar){                    
                    this.setIcono(Utileria.ICONO_COMPONENTE_BASE_STANDARD, objNodo.getStrIdentificador(), "",selected);
                } 
                else if(obj instanceof ComponenteBasePersonalizado){                    
                    this.setIcono(Utileria.ICONO_COMPONENTE_BASE_PERSONALIZADO, objNodo.getStrIdentificador(), "",selected);
                }
                else if (obj instanceof String) {
                    String strClassPathComponente = (String) obj;
                    if(Utileria.esPosibleInstanciar(strClassPathComponente)){
                        this.setIcono(Utileria.ICONO_COMPONENTE, strClassPathComponente, "Control Swing", selected);
                    }
                    else{
                        this.setIcono(Utileria.ICONO_COMPONENTE, strClassPathComponente, "Control Swing", selected);
                    }                    
                }
                else{
                    this.setIcono(Utileria.ICONO_VACIO, nodeInfo.toString(), "",selected);
                }
            }
        }
        else{
            //son grupos
            Object obj = objNodo.getObjElemento();
            if (obj == null) {
                this.setIcono(Utileria.ICONO_CARPETA, objNodo.getStrIdentificador(), "", selected);
            }                                
        }
        return this;
    }

    private Component getEstructuraComponente(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodo = (InformacionNodo) nodeInfo;
        // Se pone el icono adecuado
        if(node.isRoot()){            
            if (objNodo.getObjElemento() == null) {
                this.configIconoRaiz(objNodo, selected);                
            }
            else{
                Object obj = objNodo.getObjElemento();
                if(obj instanceof ObjetoTipoDatoReflexion){
                    this.configIconoObjetoTipoDatoReflexion((ObjetoTipoDatoReflexion) obj,selected);
                }
                else if(obj instanceof Componente){
                    this.configIconoComponente((Componente)obj, selected);
                }
                else if(obj instanceof ComponenteBeans){
                    this.setIcono(Utileria.ICONO_COMPONENTE_BEANS, objNodo.getStrIdentificador(), "",selected);
                } 
                else{
                    this.setIcono(Utileria.ICONO_VACIO, nodeInfo.toString(), "",selected);
                }
            }
        }
        else if (leaf) {
            //es una hoja, se debe evaluar el tipo
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_VACIO, objNodo.getStrIdentificador(), "",selected);
            } else {
                Object obj = objNodo.getObjElemento();                
                if(obj instanceof Componente){
                    this.configIconoComponente((Componente)obj, selected);
                }
                else if (obj instanceof Oyente) {
                    Oyente objOyente = (Oyente) obj;
                    this.setIcono(Utileria.ICONO_OYENTE, objOyente.getStrNombre(), "Oyente", selected);
                }
                else if (obj instanceof EventoOyente) {
                    EventoOyente objEvento = (EventoOyente) obj;
                    String strNombre = objEvento.getStrAlias().isEmpty() ? objEvento.getStrNombre() : objEvento.getStrAlias();
                    this.setIcono(Utileria.ICONO_EVENTO, strNombre, "Evento", selected);
                }
                else if(obj instanceof ObjetoTipoDatoReflexion){
                    this.configIconoObjetoTipoDatoReflexion((ObjetoTipoDatoReflexion) obj,selected);
                }
                else if (obj instanceof String) {
                    String strClassPathComponente = (String) obj;
                    if(Utileria.esPosibleInstanciar(strClassPathComponente)){
                        this.setIcono(Utileria.ICONO_COMPONENTE, strClassPathComponente, "Control Swing", selected);
                    }
                    else{
                        this.setIcono(Utileria.ICONO_COMPONENTE, strClassPathComponente, "Control Swing", selected);
                    }                    
                }
                else if(obj instanceof PropiedadBeans){                    
                    this.setIcono(Utileria.ICONO_PROPIEDAD_BEANS, objNodo.getStrIdentificador(), "", selected);
                }
            }
        }
        else{
            //son grupos
            Object obj = objNodo.getObjElemento();
            if (obj == null) {
                this.setIcono(Utileria.ICONO_CARPETA, objNodo.getStrIdentificador(), "", selected);
            }                    
            else if(obj instanceof Componente){
                this.configIconoComponente((Componente)obj, selected);
            }
            else if (obj instanceof Oyente) {
                this.setIcono(Utileria.ICONO_OYENTE, objNodo.getStrIdentificador(), "Oyente", selected);
            }
            else if(obj instanceof ObjetoTipoDatoReflexion){                                
                this.configIconoObjetoTipoDatoReflexion((ObjetoTipoDatoReflexion) obj, selected);                
            }            
            else if(obj instanceof Field){
                this.setIcono(Utileria.ICONO_ATRIBUTO, objNodo.getStrIdentificador(), "",selected);
            }
            else if(obj instanceof Method){
                this.setIcono(Utileria.ICONO_METODO, objNodo.getStrIdentificador(), "",selected);
            }
            else if(obj instanceof ModeloAsociado){
                this.setIcono(Utileria.ICONO_MODELO_ASOCIADO, objNodo.getStrIdentificador(), "",selected);
            }
            else if(obj instanceof ComponenteBeans){
                this.setIcono(Utileria.ICONO_COMPONENTE_BEANS, objNodo.getStrIdentificador(), "",selected);
            }            
            else if(obj instanceof PropiedadBeans){                
                this.setIcono(Utileria.ICONO_PROPIEDAD_BEANS, objNodo.getStrIdentificador(), "", selected);
            }            
            else if(obj instanceof ComponenteBeans){
                this.setIcono(Utileria.ICONO_COMPONENTE_BEANS, objNodo.getStrIdentificador(), "",selected);
            }            
            else if (obj instanceof TipoCaso) {
                this.configIconoCaso((TipoCaso) obj, selected);
            }
        }
        return this;
    }

    private Component getEstructuraBiblioteca(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodo = (InformacionNodo) nodeInfo;
        // Se pone el icono adecuado
        if(node.isRoot()){
            this.setIcono(Utileria.ICONO_RAIZ_BIBLIOTECA, objNodo.getStrIdentificador(), "",selected);
        }
        else if (leaf) {
            //es una hoja, se debe evaluar el tipo
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_VACIO, objNodo.getStrIdentificador(), "", selected);
            } else {
                Object obj = objNodo.getObjElemento();
                if (obj instanceof Componente) {
                    this.configIconoComponente((Componente)obj, selected);
                }                
                else if (obj instanceof TipoCaso) {
                    this.configIconoCaso((TipoCaso) obj, selected);                    
                }
                else if(obj instanceof PropiedadBeans){                    
                    this.setIcono(Utileria.ICONO_PROPIEDAD_BEANS, objNodo.getStrIdentificador(), "", selected);
                }
                else if(obj instanceof ObjetoTipoDatoReflexion){
                    this.configIconoObjetoTipoDatoReflexion((ObjetoTipoDatoReflexion) obj,selected);
                }
                else if (obj instanceof String) {
                    String strClassPathComponente = (String) obj;
                    if(Utileria.esPosibleInstanciar(strClassPathComponente)){
                        this.setIcono(Utileria.ICONO_COMPONENTE, objNodo.getStrIdentificador(), "Control Swing", selected);
                    }
                    else{
                        this.setIcono(Utileria.ICONO_COMPONENTE, objNodo.getStrIdentificador(), "Control Swing", selected);
                    }  
                }
            }
        }
        else{
            //son grupos
            Object obj = objNodo.getObjElemento();
            if (obj == null) {
                this.setIcono(Utileria.ICONO_CARPETA, objNodo.getStrIdentificador(), "", selected);
            }
            else if (obj instanceof Componente) {
                this.configIconoComponente((Componente)obj, selected);
            }
            else if(obj instanceof PropiedadBeans){                
                this.setIcono(Utileria.ICONO_PROPIEDAD_BEANS, objNodo.getStrIdentificador(), "", selected);
            }
            else if(obj instanceof ModeloAsociado){
                this.setIcono(Utileria.ICONO_MODELO_ASOCIADO, objNodo.getStrIdentificador(), "",selected);
            }
            else if(obj instanceof ComponenteBeans){
                this.setIcono(Utileria.ICONO_COMPONENTE_BEANS, objNodo.getStrIdentificador(), "",selected);
            }
            else if(obj instanceof ObjetoTipoDatoReflexion){                
                this.configIconoObjetoTipoDatoReflexion((ObjetoTipoDatoReflexion) obj, selected);                
            }
            else if (obj instanceof TipoCaso) {
                this.configIconoCaso((TipoCaso) obj, selected);
            }
            else if (obj instanceof Field) {
                this.setIcono(Utileria.ICONO_ATRIBUTO, nodeInfo.toString(), "Atributo",selected);
            } else if (obj instanceof Method) {
                this.setIcono(Utileria.ICONO_METODO, nodeInfo.toString(), "Método",selected);
            } 
        }
        return this;
    }
    
    private Component getEstructuraPropiedadesClases(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodo = (InformacionNodo) nodeInfo;
        // Se pone el icono adecuado
        if(node.isRoot()){
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_VACIO, nodeInfo.toString(), "", selected);
            }
            else{
                if(objNodo.getObjElemento() instanceof String){
                    String strClassPath = (String) objNodo.getObjElemento();
                    this.setIcono(Utileria.ICONO_CLASE, strClassPath, "Clase", selected);
                }                
            }
        }
        else if (leaf) {
            //es una hoja, se debe evaluar el tipo
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_VACIO, nodeInfo.toString(), "", selected);
            } else {
                Object obj = objNodo.getObjElemento();
                if (obj instanceof Field) {
                    this.setIcono(Utileria.ICONO_ATRIBUTO, nodeInfo.toString(), "Atributo",selected);
                } else if (obj instanceof Method) {
                    this.setIcono(Utileria.ICONO_METODO, nodeInfo.toString(), "Método",selected);
                } 
            }
        } else {
            //es una carpeta, se debe evaluar el tipo
            this.setIcono(Utileria.ICONO_CARPETA, nodeInfo.toString(), "",selected);
        }        
        this.repaint();
        return this;
    }
    
    private Component getEstructuraModelsStatic(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodo = (InformacionNodo) nodeInfo;
        // Se pone el icono adecuado
        if(node.isRoot()){
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_RAIZ_JAR, nodeInfo.toString(), "", selected);
            }
            else{
                if(objNodo.getObjElemento() instanceof String){
                    String strClassPath = (String) objNodo.getObjElemento();
                    this.setIcono(Utileria.ICONO_VACIO, strClassPath, "Clase", selected);
                }                
            }
        }
        else if (leaf) {
            //es una hoja, se debe evaluar el tipo
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_VACIO, nodeInfo.toString(), "", selected);
            } else {
                Object obj = objNodo.getObjElemento();
                if (obj instanceof ItemStaticListModelObject) {
                    this.setIcono(Utileria.ICONO_ITEM_MODEL_STATIC, nodeInfo.toString(), "Item",selected);
                } 
            }
//        } else {
//            //es una carpeta, se debe evaluar el tipo
//            this.setIcono(Utileria.ICONO_CARPETA, nodeInfo.toString(), "",selected);
        }       
        else{
            if(objNodo.getObjElemento() instanceof StaticListModelObject){
                StaticListModelObject objStaticListModelObject = (StaticListModelObject) objNodo.getObjElemento();
                this.setIcono(Utileria.ICONO_MODEL_STATIC, objStaticListModelObject.getName(), "Modelo", selected);
            }             
        }
        this.repaint();
        return this;
    }
    
    private Component getEstructuraMetodo(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodo = (InformacionNodo) nodeInfo;
        // Se pone el icono adecuado
        if(node.isRoot()){
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_VACIO, nodeInfo.toString(), "", selected);
            }
            else{
                if(objNodo.getObjElemento() instanceof String){
                    String strMetodo = (String) objNodo.getObjElemento();
                    this.setIcono(Utileria.ICONO_METODO, strMetodo, "Método", selected);
                }
                else if(objNodo.getObjElemento() instanceof Method){
                    Method objMetodo = (Method) objNodo.getObjElemento();
                    this.setIcono(Utileria.ICONO_METODO, objMetodo.getName(), "Método", selected);
                }
            }
        }
        else if (leaf) {
            //es una hoja, se debe evaluar el tipo
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_VACIO, nodeInfo.toString(), "", selected);
            } else {
                Object obj = objNodo.getObjElemento();
                if (obj instanceof Field) {
                    this.setIcono(Utileria.ICONO_ATRIBUTO, nodeInfo.toString(), "Atributo",selected);
                } else if (obj instanceof Method) {
                    this.setIcono(Utileria.ICONO_METODO, nodeInfo.toString(), "Método",selected);
                } else if (obj instanceof ObjetoTipoDatoReflexion) {                    
                    this.configIconoObjetoTipoDatoReflexion((ObjetoTipoDatoReflexion) obj,selected);
                }                 
            }
        } else {
            //es una carpeta, se debe evaluar el tipo
            this.setIcono(Utileria.ICONO_CARPETA, nodeInfo.toString(), "",selected);
        }        
        this.repaint();
        return this;
    }
    
    private Component getEstructuraComponenteGeneradorClase(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodo = (InformacionNodo) nodeInfo;
        // Se pone el icono adecuado
        if(node.isRoot()){            
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_VACIO, nodeInfo.toString(), "", selected);
            }
            else{
                Object obj = objNodo.getObjElemento();
                if(obj instanceof ComponenteDistribuidorGeneradorClaseCompleja){
                    this.configIconoComponente((Componente)obj, selected);                                        
                }
                else if(obj instanceof String){
                    String strNameClase = (String) objNodo.getObjElemento();
                    this.setIcono(Utileria.ICONO_RAIZ_GUI, strNameClase, "Método", selected);
                }
                else{
                    this.setIcono(Utileria.ICONO_RAIZ_GUI, nodeInfo.toString(), "",selected);
                }
            }
        }
        else if (leaf) {
            //es una hoja, se debe evaluar el tipo
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_VACIO, objNodo.getStrIdentificador(), "",selected);
            } else {
                Object obj = objNodo.getObjElemento();
                if(obj instanceof Componente){
                    this.configIconoComponente((Componente)obj, selected);                                        
                }    
                else if(obj instanceof ObjetoTipoDatoReflexion){                    
                    this.configIconoObjetoTipoDatoReflexion((ObjetoTipoDatoReflexion) obj, selected);                
                }
                else if (obj instanceof String) {
                    String strClassPathComponente = (String) obj;
                    if(Utileria.esPosibleInstanciar(strClassPathComponente)){
                        this.setIcono(Utileria.ICONO_COMPONENTE, strClassPathComponente, "Control Swing", selected);
                    }
                }
            }
        }
        else{
            //son grupos
            Object obj = objNodo.getObjElemento();
            if (obj == null) {
                this.setIcono(Utileria.ICONO_CARPETA, objNodo.getStrIdentificador(), "", selected);
            }
            else if(obj instanceof Componente){
                this.configIconoComponente((Componente)obj, selected);                                        
            }
        }
        return this;
    }
    
    private Component getEstructuraComponenteGeneradorMetodo(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodo = (InformacionNodo) nodeInfo;
        // Se pone el icono adecuado
        if(node.isRoot()){
            this.setIcono(Utileria.ICONO_RAIZ_GUI, nodeInfo.toString(), "",selected);
        }
        else if (leaf) {
            //es una hoja, se debe evaluar el tipo
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_VACIO, objNodo.getStrIdentificador(), "",selected);
            } 
            else {
                Object obj = objNodo.getObjElemento();
                if(obj instanceof Componente){
                    this.configIconoComponente((Componente)obj, selected);                                        
                }
                else if(obj instanceof ObjetoTipoDatoReflexion){
                    this.configIconoObjetoTipoDatoReflexion((ObjetoTipoDatoReflexion) obj,selected);
                }
                else if (obj instanceof String) {
                    String strClassPathComponente = (String) obj;
                    if(Utileria.esPosibleInstanciar(strClassPathComponente)){
                        this.setIcono(Utileria.ICONO_COMPONENTE, strClassPathComponente, "Control Swing", selected);
                    }
                }
            }
        }
        else{
            //son grupos
            Object obj = objNodo.getObjElemento();
            if (obj == null) {
                this.setIcono(Utileria.ICONO_CARPETA, objNodo.getStrIdentificador(), "", selected);
            }
            else if (obj instanceof Componente) {
                this.configIconoComponente((Componente)obj, selected);                                        
            }
        }
        return this;
    }
    
    private Component getEstructuraPaquetesGUI(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodo = (InformacionNodo) nodeInfo;
        // Se pone el icono adecuado
        if(node.isRoot()){
            this.setIcono(Utileria.ICONO_RAIZ_JAR, nodeInfo.toString(), "",selected);
        }
        else if (leaf) {
            //es una hoja, se debe evaluar el tipo
            this.setIcono(Utileria.ICONO_RAIZ_JAR, nodeInfo.toString(), "",selected);
        }
        else{
            this.setIcono(Utileria.ICONO_RAIZ_JAR, nodeInfo.toString(), "",selected);
        }
        return this;
    }
    
    private Component getEstructuraComponenteBeans(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodo = (InformacionNodo) nodeInfo;
        // Se pone el icono adecuado
        if(node.isRoot()){
            //this.setIcono(Utileria.ICONO_RAIZ_GUI, nodeInfo.toString(), "",selected);
            if (objNodo.getObjElemento() == null) {
                this.configIconoRaiz(objNodo, selected);                
            }
            else{
                Object obj = objNodo.getObjElemento();
                if(obj instanceof ComponenteBeans){
                    this.setIcono(Utileria.ICONO_COMPONENTE_BEANS, objNodo.getStrIdentificador(), "",selected);
                }               
                else{
                    this.setIcono(Utileria.ICONO_VACIO, nodeInfo.toString(), "",selected);
                }
            }
        }
        else if (leaf) {
            //es una hoja, se debe evaluar el tipo
            if (objNodo.getObjElemento() == null) {
                this.setIcono(Utileria.ICONO_VACIO, objNodo.getStrIdentificador(), "",selected);
            } else {
                Object obj = objNodo.getObjElemento();                
                if (obj instanceof String) {
                    String strClassPathComponente = (String) obj;
                    if(Utileria.esPosibleInstanciar(strClassPathComponente)){
                        this.setIcono(Utileria.ICONO_COMPONENTE, strClassPathComponente, "Control Swing", selected);
                    }
                    else{
                        this.setIcono(Utileria.ICONO_COMPONENTE, strClassPathComponente, "Control Swing", selected);
                    }                    
                }
            }
        }
        else{
            //son grupos
            Object obj = objNodo.getObjElemento();
            if (obj == null) {
                this.setIcono(Utileria.ICONO_CARPETA, objNodo.getStrIdentificador(), "", selected);
            }                    
            else if(obj instanceof Componente){
                this.configIconoComponente((Componente)obj, selected);
            } 
            else if(obj instanceof PropiedadBeans){                
                this.setIcono(Utileria.ICONO_PROPIEDAD_BEANS, objNodo.getStrIdentificador(), "", selected);
            }    
            else{
                this.setIcono(Utileria.ICONO_VACIO, nodeInfo.toString(), "",selected);
            }
        }
        return this;
    }
        
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {        
       try{
            switch(modo){
                case Utileria.ARBOL_CLASES:
                    return this.getEstructuraJar(tree, value, selected, expanded, leaf, row, hasFocus);               
                case Utileria.ARBOL_COMPONENTES:
                    return this.getEstructuraComponentes(tree, value, selected, expanded, leaf, row, hasFocus);
                case Utileria.ARBOL_COMPONENTE:
                    return this.getEstructuraComponente(tree, value, selected, expanded, leaf, row, hasFocus);
                case Utileria.ARBOL_TIPOS:
                    return this.getEstructuraTiposDeDatos(tree, value, selected, expanded, leaf, row, hasFocus);
                case Utileria.ARBOL_BIBLIOTECA:
                    return this.getEstructuraBiblioteca(tree, value, selected, expanded, leaf, row, hasFocus);
                case Utileria.ARBOL_PROPIEDADES_GENERADOR_CLASE:
                    return this.getEstructuraPropiedadesClases(tree, value, selected, expanded, leaf, row, hasFocus);
                case Utileria.ARBOL_ESTRUCTURA_METODO:
                    return this.getEstructuraMetodo(tree, value, selected, expanded, leaf, row, hasFocus);
                case Utileria.ARBOL_COMPONENTE_GENERADOR_CLASE:
                    return this.getEstructuraComponenteGeneradorClase(tree, value, selected, expanded, leaf, row, hasFocus);                
                case Utileria.ARBOL_COMPONENTE_GENERADOR_METODO:
                    return this.getEstructuraComponenteGeneradorMetodo(tree, value, selected, expanded, leaf, row, hasFocus);                
                case Utileria.ARBOL_ESTRUCTURA_PAQUETES_GUI:
                    return this.getEstructuraPaquetesGUI(tree, value, selected, expanded, leaf, row, hasFocus);                
                case Utileria.ARBOL_ESTRUCTURA_COMPONENTE_BEANS:
                    return this.getEstructuraComponenteBeans(tree, value, selected, expanded, leaf, row, hasFocus);
                case Utileria.ARBOL_ESTRUCTURA_MODEL_STATIC:
                    return this.getEstructuraModelsStatic(tree, value, selected, expanded, leaf, row, hasFocus);
                case Utileria.ARBOL_ESTRUCTURA_PALETA:
                    return this.getEstructuraPaleta(tree, value, selected, expanded, leaf, row, hasFocus);    

            }
            return this;
        }catch(java.lang.Exception ex){}
        return null;
    }
}
